<?php
/**
 * Lớp MyAuth
 * Kế thừa chức năng từ Laravel Authentication + hỗ trợ nhanh cho Group
 */

class MyAuth extends \Laravel\Auth
{
    const ADMIN = 1;
    const OWNER = 2;
    const LOGGED = 3;
    const USER = 3;

    public static $group_ids = array(
        'admin' => self::ADMIN,
        'owner' => self::OWNER,
        'logged' => self::LOGGED,

    );

    public static function privileges($needed)
    {
        if (is_string($needed)) {
            $needed = static::$group_ids[$needed];
        }

        return MyAuth::check() && MyAuth::user()->group_id <= $needed;
    }

    /**
     * Trả về nhóm của người dùng hiện tại đang đăng nhập
     * @return mixed
     */
    public static function group()
    {
        if (!static::check()) {
            return false;
        }
        return static::user()->group_id;
    }

    /**
     * Hỗ trợ gọi ::admin, ::owner để kiểm tra người dùng đang đăng nhập thuộc nhóm nào
     * @param $method
     * @param $arguments
     * @return bool|mixed
     */
    public static function __callStatic($method, $arguments)
    {
        // Nếu $method không nằm trong nhóm groupCode thì chuyển sang lớp cha xử lý
        if (!array_key_exists($method, static::$group_ids)) {
            return parent::__callStatic($method, $arguments);
        } else {
            // FIXED: replace === by == to compare 1 = "1"
            return static::group() == static::$group_ids[$method];
        }
    }



    /**
     * Kiểm tra người dùng hiện tại có đủ quyền cập nhật loại phòng nào đó
     * @param $room_id int loại phòng cần kiểm tra
     * @return bool
     */
    public static function has_room_privileges($room_id)
    {
        $room = Room::find($room_id);
        return is_not_null($room) && MyAuth::check() && (MyAuth::admin() || MyAuth::user()->id == $room->house->user_id);
    }

    /**
     * Kiểm tra người dùng hiện tại đang đăng nhập có quyền cập nhật một nhà trọ nào koong
     * @param $house_id int ID nhà trọ cần cập nhật
     * @return bool
     */
    public static function has_house_privileges($house_id)
    {
        $house = House::find($house_id);
        return is_not_null($house) && MyAuth::check() &&
            (MyAuth::admin() || MyAuth::user()->id == $house->user_id);
    }

}